#ifndef _USER_H_
#define _USER_H_
#include <sys/stat.h>
#include <fcntl.h>

#include "msgqueue.h"
#include "seqlist.h"
#include "printOut.h"

/*
    功能：创建用户信息
    返回值：成功：用户信息空间地址，失败: NULL
*/
PUserType CreateUserInfo();

/*
    参数：pUser 用户信息空间地址
    功能：释放用户信息
*/
void UserFree(PUserType *pUser);

/*                    Server                      */
/*
    参数：pUserTable 用户信息表空间地址
    功能：将用户信息表保存到文件中
*/
void SaveUserTable(PSeqListType pUserTable);

/*
    功能：从文件中载入用户信息表
    返回值：成功：用户信息表空间地址，失败: NULL
*/
PSeqListType LoadUserTable();

/*
    参数：
        userId     用户ID
        pUserTable 用户表信息空间地址
    功能：判断用户是否存在
    返回值：
        1  存在
        -1 不存在
*/
int IsExistUserByUserId(long userId, PSeqListType pUserTable);

/*
    参数：
        userId     用户ID
        password   密码
        pUserTable 用户表信息空间地址
    功能：访问登录
    返回值：
        0  登录成功
        -1 程序异常
        1  用户不存在
        2  重复登录
        3  密码不正确
*/
int Login(long userId, const char* password, PSeqListType pUserTable);

/*
    参数：
        pUser      用户信息空间地址 
        pUserTable 用户表信息空间地址    
    功能：响应注册 
    返回值：
        0  注册成功
        -1 程序异常
        1  用户存在 
        2  注册失败
*/
int Register(PElementType pUser, PSeqListType pUserTable);

/*
    参数：
        userId      用户ID
        pUserTable 用户表信息空间地址 
    功能：响应登出
*/
void Logout(long userId, PSeqListType pUserTable);

/*
    参数：
        userId      用户ID
        pUserTable 用户表信息空间地址 
    功能：响应注销
    返回值：
        1 成功
        -1 //程序异常
        0 失败
*/
int Destroy(long userId, PSeqListType pUserTable);
#endif